function twoSum(nums: number[], target: number): number[] {
  /**
  1. 排序数组
    1. 还要保留映射表 不存在重复的答案组合所有不需要
  2. 首尾指针相加
    1. 小于目标则不合适 左指针右移 右指针复位
    2. 大于目标值 右指针左移 直到指针交会或出现小于的情况
   */
  let first = 0
  let second = nums.length - 1
  let sortnums = nums.slice(0)
  sortnums.sort((a,b) =>{
    return a - b
  })
  while (true) {
    if (sortnums[first] + sortnums[second] < target) {
      first++
      second = nums.length - 1
    } else if (sortnums[first] + sortnums[second] > target) {
      second--
    } else {
      return [nums.indexOf(sortnums[first]), nums.lastIndexOf(sortnums[second])]
    }
  }
}

/**
 * 哈希表的写法
 */
function twoSum2(nums: number[], target: number): number[] {
  let hash = new Map<number,number>()
  for (let i = 0; i < nums.length; i++) {
    if (hash.has(target - nums[i])) {
      return [hash.get(target - nums[i]) as number, i]
    }
    hash.set(nums[i], i)
  }
}

module.exports.twoSum = twoSum2